package com.neusoft.utils;

import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.springframework.core.convert.converter.Converter;

public class DateTimeConvert implements Converter<String, Date> {

	@Override
	public Date convert(String strD) {
		// 自定义类型转换器实现：继承converter接口，实现convert方法即可。（面向接口的编程思想。实现思想和比较器的思路是一样）
		Date myD = doConverting(strD);
		// 将参数StrD转换为Date类型
		return myD;
	}

	/**
	 * 将时间字符串转换为时间对象类型
	 * 
	 * @param value
	 *            被转换的字符串
	 * @return 时间对象
	 */
	private Date doConverting(String value) {
		// 默认值
		Date date = null;
		// 要转换的目标日期类型的格式
		final String DATE = "yyyy-MM-dd";  // 10
		final String DATETIME = "yyyy-MM-dd HH:mm:ss"; // 19
		final String TIMESTAMP = "yyyy-MM-dd HH:mm:ss.SSS"; // 23
		// 将字符串转换为日期对象
		if (value == null || "".equals(value)) {
			return date;
		}
		// 判断被转换的对象值是不是String类型
		if (value instanceof String) {
			// 获取转换的对象的字符串
			String dateValue = value.toString().trim();
			// 被转换字符串的长度
			int length = dateValue.length();
			try {
				DateFormat formatter = null;
				// 处理只有年月日的格式：转换为“yyyy-MM-dd”格式的Date对象
				if (length <= DATE.length()) {
					formatter = new SimpleDateFormat(DATE, new DateFormatSymbols(Locale.CHINA));
					date = formatter.parse(dateValue);
				}
				// 处理只有年月日时分秒的格式：转换为“yyyy-MM-dd HH:mm:ss”格式的Date对象
				else if (length <= DATETIME.length()) {
					formatter = new SimpleDateFormat(DATETIME, new DateFormatSymbols(Locale.CHINA));
					date = formatter.parse(dateValue);
				}
				// 处理只有年月日时分秒三位毫秒的格式：转换为“yyyy-MM-dd
				// HH:mm:ss.SSS”格式的Date对象
				else if (length <= TIMESTAMP.length()) {
					formatter = new SimpleDateFormat(TIMESTAMP, new DateFormatSymbols(Locale.CHINA));
					date = formatter.parse(dateValue);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return date;
	}
}
